/*
 * ppd_interface.c
 *
 *  Created on: 09/10/2011
 *      Author: Normandia
 */

#include "ppd_interface.h"

void readSector(uint32_t sector, void* sector_buffer) {

	T_MENSAJE* mensaje;
	T_MSG_LECTURA_RTA* rta;

	mensaje = mensaje_lectura(sector,0);

	mensaje = enviarYRecibir(mensaje); // Recibe la respuesta

	rta = mensaje->mensaje;
	memcpy(sector_buffer, rta->data, SECTOR_SIZE);

	eliminarMensaje(mensaje);

}

void writeSector(uint32_t sector, void* data_buffer) {

	T_MENSAJE* mensaje;

	mensaje = mensaje_escritura(sector,0,data_buffer);

	mensaje = enviarYRecibir(mensaje); // Recibe la respuesta

	if(mensaje->length != 8) {
		printf("Error escribiendo el sector %u\n",sector);
	}

	eliminarMensaje(mensaje);

}

void readBlock(uint32_t sector_inic, void* block_buffer) {

	T_MENSAJE* mensaje;
	T_MSG_LECTURA_RTA* rta;
	uint32_t i;
	uint8_t id_socket;

	id_socket = obtenerSocketReady();
	for(i=0;i<BLOCK_SIZE;i++) {
		mensaje = mensaje_lectura(sector_inic+i,i);
		enviar(id_socket,mensaje);
	}

	for(i=0;i<BLOCK_SIZE;i++) {

		mensaje = recibir(id_socket);
		rta = mensaje->mensaje;
		memcpy(block_buffer+rta->id_pedido * SECTOR_SIZE, rta->data, SECTOR_SIZE);
		eliminarMensaje(mensaje);

	}

	liberarSocket(id_socket);

}

void writeBlock(uint32_t sector_inic, void* data_buffer) {

	T_MENSAJE* mensaje;
	uint8_t id_socket;
	T_MSG_ESCRITURA_RTA* rta;
	uint32_t i;

	id_socket = obtenerSocketReady();
	for(i=0;i<BLOCK_SIZE;i++) {
		mensaje = mensaje_escritura(sector_inic+i,i,data_buffer+i*SECTOR_SIZE);
		enviar(id_socket,mensaje);
	}

	for(i=0;i<BLOCK_SIZE;i++) {

		mensaje = recibir(id_socket);
		if(mensaje->length != 8) {
			rta = mensaje->mensaje;
			printf("Error escribiendo el sector %u\n",sector_inic + i);
		}
		eliminarMensaje(mensaje);

	}

	liberarSocket(id_socket);
}
